import { pgTable, uuid, varchar, smallint, boolean, index } from 'drizzle-orm/pg-core';
import { sql } from 'drizzle-orm';
import { DICT_STATUS } from '@nbase/shared';
import { auditFields } from './audit-fields';

/**
 * 系统-字典数据表
 */
export const sysDictData = pgTable(
  'sys_dict_data',
  {
    /** 字典数据ID（主键） */
    id: uuid('id').primaryKey().default(sql`uuidv7()`),
    /** 显示标签 */
    label: varchar('label', { length: 128 }).notNull(),
    /** 数据值 */
    value: varchar('value', { length: 128 }).notNull(),
    /** 字典ID（逻辑外键，关联 sys_dict.id） */
    dictId: uuid('dict_id').notNull(),
    /** 状态（1.启用 2.禁用） */
    status: smallint('status').notNull().default(DICT_STATUS.ACTIVE),
    /** 排序 */
    sort: smallint('sort').notNull().default(0),
    /** 描述 */
    description: varchar('description', { length: 256 }),
    /** 是否默认值 */
    isDefault: boolean('is_default').notNull().default(false),
    ...auditFields(),
  },
  (table) => [
    index('sys_dict_data_dict_id_idx').on(table.dictId),
  ]
);

export type SysDictData = typeof sysDictData.$inferSelect;
export type NewSysDictData = typeof sysDictData.$inferInsert;

